home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / networke / cow / cowl-1.000 / cowl-1 / dashboard.c < prev    next >
C/C++ Source or Header  |  1994-04-16  |  17KB  |  651 lines

  1. /*
  2.  * dashboard.c - graphic tstatw - 6/2/93
  3.  *
  4.  * copyright 1993 Lars Bernhardsson (lab@mtek.chalmers.se)
  5.  * Free to use as long as this notice is left here.
  6.  *
  7.  * Color by Nick Trown.
  8.  */
  9.  
  10. #include "copyright.h"
  11.  
  12. #include <stdio.h>
  13. #include "Wlib.h"
  14. #include "defs.h"
  15. #include "struct.h"
  16. #include "data.h"
  17.  
  18. #include "string_util.c"
  19.  
  20. #define DB_NOFILL 0
  21. #define DB_LINE 1
  22. #define DB_FILL 2
  23.  
  24. #define DB_3DIGITS 0
  25. #define DB_5DIGITS 1
  26.  
  27. #define BAR_LENGTH 56
  28.  
  29. void
  30. db_box (x, y, w, h, f, color)
  31.      int x, y, w, h, f, color;
  32. {
  33.   int border = W_White;
  34.   register int i;
  35.  
  36.   if (color == W_Red)
  37.     border = color;
  38.  
  39.   if (w == 0 || h == 0)
  40.     return;
  41.  
  42.   switch (f)
  43.     {
  44.     case DB_FILL:
  45.       W_FillArea (tstatw, x, y, w + 1, h + 1, color);
  46.       break;
  47.     case DB_LINE:
  48.       W_MakeLine (tstatw, x + w, y, x + w, y + h, border);
  49.       W_MakeLine (tstatw, x + w, y + 4, x + BAR_LENGTH, y + 4, border);
  50.       break;
  51.     case DB_NOFILL:
  52.       W_MakeLine (tstatw, x, y, x + w, y, border);
  53.       W_MakeLine (tstatw, x + w, y, x + w, y + h, border);
  54.       W_MakeLine (tstatw, x + w, y + h, x, y + h, border);
  55.       W_MakeLine (tstatw, x, y + h, x, y, border);
  56.       break;
  57.     }
  58. }
  59.  
  60. void
  61. db_bar (lab, x, y, value, tmpmax, max, digits, color)
  62.      char *lab;
  63.      int x, y, value, tmpmax, max, digits, color;
  64. {
  65.   register int wt, wv, tw, tc;
  66.   char valstr[32];
  67.  
  68.   switch (digits)
  69.     {
  70.     case DB_3DIGITS:
  71.       tc = 11;
  72.       tw = W_Textwidth * tc;
  73.       valstr [0] = lab [0];
  74.       valstr [1] = lab [1];
  75.       valstr [2] = '[';
  76.       dectoa (value, &(valstr [3]), 0, 3);
  77.       valstr [6] = '/';
  78.       dectoa (tmpmax, &(valstr [7]), 0, 3);
  79.       valstr [10] = ']';
  80.       W_ClearArea (tstatw, x, y, tw + BAR_LENGTH, 10);
  81.       break;
  82.     case DB_5DIGITS:
  83.       tc = 15;
  84.       tw = W_Textwidth * tc;
  85.       valstr [0] = lab [0];
  86.       valstr [1] = lab [1];
  87.       valstr [2] = '[';
  88.       dectoa (value, &(valstr [3]), 0, 5);
  89.       valstr [8] = '/';
  90.       dectoa (tmpmax, &(valstr [9]), 0, 5);
  91.       valstr [14] = ']';
  92.       W_ClearArea (tstatw, x, y, tw + BAR_LENGTH, 10);
  93.       break;
  94.     }
  95.  
  96.   wt = (int) ((float) BAR_LENGTH * ((float) tmpmax / (float) max));
  97.   wv = (int) ((float) BAR_LENGTH * ((float) value / (float) max));
  98.   if (wt > BAR_LENGTH)
  99.     wt = BAR_LENGTH;
  100.   if (wv > BAR_LENGTH)
  101.     wv = BAR_LENGTH;
  102.  
  103.   W_WriteText (tstatw, x, y, textColor, valstr, 3, W_RegularFont);
  104.   W_WriteText (tstatw, x + 3*W_Textwidth, y, textColor, (&valstr [3]), tc/2 + 1, W_BoldFont);
  105.   W_WriteText (tstatw, x + (tc/2 + 1)*W_Textwidth, y, textColor, (&valstr [tc/2 + 1]), tc/2, W_RegularFont);
  106.  
  107.   db_box (x + tw, y, BAR_LENGTH, 9, DB_NOFILL, color);
  108.   if (wt >= wv && wt > 0)
  109.     db_box (x + tw, y, wt, 9, DB_LINE, color);
  110.  
  111.   if (wv > 0)
  112.     db_box (x + tw, y, wv, 9, DB_FILL, color);
  113. }
  114.  
  115. void
  116. db_flags (fr)
  117. {
  118.   static float old_kills = -1.0;
  119.   static int old_torp = -1;
  120.   static unsigned int old_flags = -1;
  121.   static int old_tourn = -1;
  122.   char buf[16];
  123.  
  124.   if (fr || me->p_flags != old_flags)
  125.     {
  126.       buf[0] = (me->p_flags & PFSHIELD ? 'S' : ' ');
  127.       if (me->p_flags & PFGREEN)
  128.     buf[1] = 'G';
  129.       else if (me->p_flags & PFYELLOW)
  130.     buf[1] = 'Y';
  131.       else
  132.     buf[1] = 'R';
  133.       buf[2] = (me->p_flags & (PFPLLOCK | PFPLOCK) ? 'L' : ' ');
  134.       buf[3] = (me->p_flags & PFREPAIR ? 'R' : ' ');
  135.       buf[4] = (me->p_flags & PFBOMB ? 'B' : ' ');
  136.       buf[5] = (me->p_flags & PFORBIT ? 'O' : ' ');
  137.       if (me->p_ship.s_type == STARBASE)
  138.     buf[6] = (me->p_flags & PFDOCKOK ? 'D' : ' ');
  139.       else
  140.     buf[6] = (me->p_flags & PFDOCK ? 'D' : ' ');
  141.       buf[7] = (me->p_flags & PFCLOAK ? 'C' : ' ');
  142.       buf[8] = (me->p_flags & PFWEP ? 'W' : ' ');
  143.       buf[9] = (me->p_flags & PFENG ? 'E' : ' ');
  144.       if (me->p_flags & PFPRESS)
  145.     buf[10] = 'P';
  146.       else if (me->p_flags & PFTRACT)
  147.     buf[10] = 'T';
  148.       else
  149.     buf[10] = ' ';
  150.       if (me->p_flags & PFBEAMUP)
  151.     buf[11] = 'u';
  152.       else if (me->p_flags & PFBEAMDOWN)
  153.     buf[11] = 'd';
  154.       else
  155.     buf[11] = ' ';
  156.  
  157.       W_WriteText (tstatw, 2, 3, textColor, "Flags", 5, W_RegularFont);
  158.       W_WriteText (tstatw, 2, 17, textColor, buf, 12, W_RegularFont);
  159.       old_flags = me->p_flags;
  160.     }
  161.  
  162.   if (fr || status->tourn != old_tourn)
  163.     {
  164.       if (status->tourn)
  165.     W_WriteText (tstatw, 74, 17, textColor, "T", 1, W_BoldFont);
  166.       else
  167.     W_WriteText (tstatw, 74, 17, textColor, " ", 1, W_BoldFont);
  168.  
  169.       old_tourn = status->tourn;
  170.     }
  171.  
  172.   if (fr || me->p_kills != old_kills)
  173.     {
  174.       if (me->p_kills > 0.0)
  175.     {
  176.           int kills = 100*me->p_kills;
  177.       W_WriteText (tstatw, 346, 17, textColor, "Kills:", 6, W_RegularFont);
  178.        ftoa (me->p_kills, buf, 0, 3, 2);
  179.       W_WriteText (tstatw, 386, 17, textColor, buf, strlen (buf), W_RegularFont);
  180.     }
  181.       else
  182.     {
  183.       W_ClearArea (tstatw, 346, 17, 96, 10);
  184.     }
  185.       old_kills = me->p_kills;
  186.     }
  187.  
  188.   if (fr || me->p_ntorp != old_torp)
  189.     {
  190.       if (me->p_ntorp > 0)
  191.     {
  192.       W_WriteText (tstatw, 346, 30, textColor, "Torps:", 6, W_RegularFont);
  193.       buf [0] = me->p_ntorp%10 + '0';
  194.       W_WriteText (tstatw, 386, 30, textColor, buf, 1, W_RegularFont);
  195.     }
  196.       else
  197.     {
  198.       W_ClearArea (tstatw, 346, 30, 96, 10);
  199.     }
  200.       old_torp = me->p_ntorp;
  201.     }
  202. }
  203.  
  204. #ifndef NEW_DASHBOARD_2
  205. void
  206. db_redraw (fr)
  207.      int fr;
  208. {
  209.   static int old_spd = -1, old_cur_spd = -1;
  210.   static int old_shl = -1, old_dam = -1;
  211.   static int old_arm = -1, old_cur_arm = -1;
  212.   static int old_wpn = -1, old_egn = -1;
  213.   static int old_ful = -1;
  214.   register int cur_max;
  215.   register int value;
  216.   int color;
  217.   int index = 0;
  218.   register int mid;
  219.  
  220.   if (me->p_ship.s_type == STARBASE)    /* SB */
  221.     index = 1;
  222.  
  223.   if (fr)
  224.     W_ClearWindow (tstatw);
  225.  
  226.   db_flags (fr);
  227.  
  228.   cur_max = (me->p_ship.s_maxspeed + 2) - (me->p_ship.s_maxspeed + 1) *
  229.     ((float) me->p_damage / (float) (me->p_ship.s_maxdamage));
  230.   if (cur_max > me->p_ship.s_maxspeed)
  231.     cur_max = me->p_ship.s_maxspeed;
  232.   if (cur_max < 0)
  233.     cur_max = 0;
  234.  
  235.   if (fr || me->p_speed != old_spd || cur_max != old_cur_spd)
  236.     {
  237.       if (me->p_speed >= me->p_ship.s_maxspeed - 2)
  238.     color = W_Yellow;
  239.       else
  240.     color = W_White;
  241.       db_bar ("Sp", 90, 3,
  242.         me->p_speed, cur_max, me->p_ship.s_maxspeed, DB_3DIGITS, color);
  243.       old_spd = me->p_speed;
  244.       old_cur_spd = cur_max;
  245.     }
  246.  
  247.   if (fr || me->p_shield != old_shl)
  248.     {
  249.       value = (100 * me->p_shield) / me->p_ship.s_maxshield;
  250.       mid = 50;
  251.       if (value <= mid)
  252.     color = W_Red;
  253.       else if (value < 90)
  254.     color = W_Yellow;
  255.       else
  256.     color = W_White;
  257.       db_bar ("Sh", 90, 17,
  258.           me->p_ship.s_maxshield - me->p_shield, me->p_ship.s_maxshield, me->p_ship.s_maxshield, DB_3DIGITS, color);
  259.       old_shl = me->p_shield;
  260.     }
  261.  
  262.   if (fr || me->p_damage != old_dam)
  263.     {
  264.       value = (100 * me->p_damage) / me->p_ship.s_maxdamage;
  265.       mid = 50;
  266.       if (value <= 10)
  267.     color = W_White;
  268.       else if (value > mid)
  269.     color = W_Red;
  270.       else
  271.     color = W_Yellow;
  272.       db_bar ("Da", 90, 31,
  273.           me->p_damage, me->p_ship.s_maxdamage, me->p_ship.s_maxdamage, DB_3DIGITS, color);
  274.       old_dam = me->p_damage;
  275.     }
  276.  
  277.   if (me->p_ship.s_type == ASSAULT)
  278.     cur_max = (((me->p_kills * 3) > me->p_ship.s_maxarmies) ?
  279.            me->p_ship.s_maxarmies : (int) (me->p_kills * 3));
  280.   else if (me->p_ship.s_type == STARBASE)
  281.     cur_max = me->p_ship.s_maxarmies;
  282.   else
  283.     cur_max = (((me->p_kills * 2) > me->p_ship.s_maxarmies) ?
  284.            me->p_ship.s_maxarmies : (int) (me->p_kills * 2));
  285.  
  286.   if (fr || me->p_armies != old_arm || cur_max != old_cur_arm)
  287.     {
  288.       value = me->p_armies;
  289.       mid = 5;
  290.       if (value <= 3)
  291.     color = W_White;
  292.       else if (value > mid)
  293.     color = W_Red;
  294.       else
  295.     color = W_Yellow;
  296.       db_bar ("Ar", 218, 3,
  297.       me->p_armies, cur_max, me->p_ship.s_maxarmies, DB_3DIGITS, color);
  298.       old_arm = me->p_armies;
  299.       old_cur_arm = cur_max;
  300.     }
  301.  
  302.   if (fr || me->p_wtemp != old_wpn)
  303.     {
  304.       value = (100 * me->p_wtemp) / me->p_ship.s_maxwpntemp;
  305.       mid = 50;
  306.       if (value > mid)
  307.     color = W_Red;
  308.       else if (value <= 20)
  309.     color = W_White;
  310.       else
  311.     color = W_Yellow;
  312.       db_bar ("Wt", 218, 17,
  313.           me->p_wtemp / 10, me->p_ship.s_maxwpntemp / 10, me->p_ship.s_maxwpntemp / 10, DB_3DIGITS
  314.           ,color);
  315.       old_wpn = me->p_wtemp;
  316.     }
  317.  
  318.   if (fr || me->p_etemp != old_egn)
  319.     {
  320.       value = (100 * me->p_etemp) / me->p_ship.s_maxegntemp;
  321.       mid = 50;
  322.  
  323.       if (value <= mid / 2)
  324.     color = W_White;
  325.       else if (value < mid / 2 + mid)
  326.     color = W_Yellow;
  327.       else
  328.     color = W_Red;
  329.       db_bar ("Et", 218, 31,
  330.           me->p_etemp / 10, me->p_ship.s_maxegntemp / 10, me->p_ship.s_maxegntemp / 10, DB_3DIGITS
  331.           ,color);
  332.       old_egn = me->p_etemp;
  333.     }
  334.  
  335.   if (fr || me->p_fuel != old_ful)
  336.     {
  337.       value = ((100 * me->p_fuel) / me->p_ship.s_maxfuel);
  338.       mid = 50;
  339.       if (value <= mid)
  340.     color = W_Red;
  341.       else if (value > 90 )
  342.     color = W_White;
  343.       else
  344.     color = W_Yellow;
  345.       db_bar ("Fu", 346, 3,
  346.           me->p_fuel, me->p_ship.s_maxfuel, me->p_ship.s_maxfuel, DB_5DIGITS, color);
  347.       old_ful = me->p_fuel;
  348.     }
  349. }
  350. #else
  351. void
  352. db_redraw_krp (fr)
  353.      int fr;
  354. {
  355.   static int old_spd = -1, old_cur_spd = -1;
  356.   static int old_shl = -1, old_dam = -1;
  357.   static int old_arm = -1, old_cur_arm = -1;
  358.   static int old_wpn = -1, old_egn = -1;
  359.   static int old_ful = -1;
  360.   register int cur_max;
  361.   register int value;
  362.   int color;
  363.   int index = 0;
  364.   register int mid;
  365.  
  366.   if (me->p_ship.s_type == STARBASE)    /* SB */
  367.     index = 1;
  368.  
  369.   if (fr)
  370.     W_ClearWindow (tstatw);
  371.  
  372.   db_flags (fr);
  373.  
  374.   cur_max = (me->p_ship.s_maxspeed + 2) - (me->p_ship.s_maxspeed + 1) *
  375.     ((float) me->p_damage / (float) (me->p_ship.s_maxdamage));
  376.   if (cur_max > me->p_ship.s_maxspeed)
  377.     cur_max = me->p_ship.s_maxspeed;
  378.   if (cur_max < 0)
  379.     cur_max = 0;
  380.  
  381.   if (fr || me->p_speed != old_spd || cur_max != old_cur_spd)
  382.     {
  383.       if (me->p_speed >= me->p_ship.s_maxspeed - 2)
  384.     color = W_Red;
  385.       else
  386.     color = W_Green;
  387.       db_bar ("Sp", 90, 3,
  388.         me->p_speed, cur_max, me->p_ship.s_maxspeed, DB_3DIGITS, color);
  389.       old_spd = me->p_speed;
  390.       old_cur_spd = cur_max;
  391.     }
  392.  
  393.   if (fr || me->p_shield != old_shl)
  394.     {
  395.       value = (100 * me->p_shield) / me->p_ship.s_maxshield;
  396.       if (value <= 16)
  397.     color = W_Red;
  398.       else if (value <= 66)
  399.     color = W_Yellow;
  400.       else
  401.     color = W_Green;
  402.       db_bar ("Sh", 90, 17,
  403.           me->p_shield, me->p_ship.s_maxshield, me->p_ship.s_maxshield,
  404.           DB_3DIGITS, color);
  405.       old_shl = me->p_shield;
  406.     }
  407.  
  408.   if (fr || me->p_damage != old_dam)
  409.     {
  410.       value = (100 * (me->p_ship.s_maxdamage - me->p_damage)) / me->p_ship.s_maxdamage;
  411.       if (value <= 16)
  412.     color = W_Red;
  413.       else if (value <= 66)
  414.     color = W_Yellow;
  415.       else
  416.     color = W_Green;
  417.       db_bar ("Hu", 90, 31,
  418.           (me->p_ship.s_maxdamage - me->p_damage),
  419.           me->p_ship.s_maxdamage, me->p_ship.s_maxdamage,
  420.           DB_3DIGITS, color);
  421.       old_dam = me->p_damage;
  422.     }
  423.  
  424.   if (me->p_ship.s_type == ASSAULT)
  425.     cur_max = (((me->p_kills * 3) > me->p_ship.s_maxarmies) ?
  426.            me->p_ship.s_maxarmies : (int) (me->p_kills * 3));
  427.   else if (me->p_ship.s_type == STARBASE)
  428.     cur_max = me->p_ship.s_maxarmies;
  429.   else
  430.     cur_max = (((me->p_kills * 2) > me->p_ship.s_maxarmies) ?
  431.            me->p_ship.s_maxarmies : (int) (me->p_kills * 2));
  432.  
  433.   if (fr || me->p_armies != old_arm || cur_max != old_cur_arm)
  434.     {
  435.       value = me->p_armies;
  436.       mid = me->p_ship.s_maxarmies / 2;
  437.       if (value <= 0)
  438.     color = W_Green;
  439.       else if (value > 0)
  440.     color = W_Red;
  441.       else
  442.     color = W_Yellow;
  443.       db_bar ("Ar", 218, 3,
  444.       me->p_armies, cur_max, me->p_ship.s_maxarmies, DB_3DIGITS, color);
  445.       old_arm = me->p_armies;
  446.       old_cur_arm = cur_max;
  447.     }
  448.  
  449.   if (fr || me->p_wtemp != old_wpn)
  450.     {
  451.       value = (100 * me->p_wtemp) / me->p_ship.s_maxwpntemp;
  452.       if (value <= 16)
  453.     color = W_Green;
  454.       else if (value <= 66)
  455.     color = W_Yellow;
  456.       else
  457.     color = W_Red;
  458.       db_bar ("Wt", 218, 17,
  459.           me->p_wtemp / 10, me->p_ship.s_maxwpntemp / 10, me->p_ship.s_maxwpntemp / 10, DB_3DIGITS
  460.           ,color);
  461.       old_wpn = me->p_wtemp;
  462.     }
  463.  
  464.   if (fr || me->p_etemp != old_egn)
  465.     {
  466.       value = (100 * me->p_etemp) / me->p_ship.s_maxegntemp;
  467.       if (value <= 16)
  468.     color = W_Green;
  469.       else if (value <= 66)
  470.     color = W_Yellow;
  471.       else
  472.     color = W_Red;
  473.       db_bar ("Et", 218, 31,
  474.           me->p_etemp / 10, me->p_ship.s_maxegntemp / 10, me->p_ship.s_maxegntemp / 10, DB_3DIGITS
  475.           ,color);
  476.       old_egn = me->p_etemp;
  477.     }
  478.  
  479.   if (fr || me->p_fuel != old_ful)
  480.     {
  481.       value = ((100 * me->p_fuel) / me->p_ship.s_maxfuel);
  482.       if (value <= 16)
  483.     color = W_Red;
  484.       else if (value <= 66)
  485.     color = W_Yellow;
  486.       else
  487.     color = W_Green;
  488.       db_bar ("Fu", 346, 3,
  489.           me->p_fuel, me->p_ship.s_maxfuel, me->p_ship.s_maxfuel, DB_5DIGITS, color);
  490.       old_ful = me->p_fuel;
  491.     }
  492. }
  493.  
  494.  
  495. void
  496. db_redraw_BRM (fr)
  497.      int fr;
  498. {
  499.   static int old_spd = -1, old_cur_spd = -1;
  500.   static int old_shl = -1, old_dam = -1;
  501.   static int old_arm = -1, old_cur_arm = -1;
  502.   static int old_wpn = -1, old_egn = -1;
  503.   static int old_ful = -1;
  504.   register int cur_max, maximum, minimum;
  505.   register int value;
  506.   int color;
  507.   int index = 0;
  508.   register int mid;
  509.  
  510.   if (me->p_ship.s_type == STARBASE)    /* SB */
  511.     index = 1;
  512.  
  513.   if (fr)
  514.     W_ClearWindow (tstatw);
  515.  
  516.   db_flags (fr);
  517.  
  518.   cur_max = (me->p_ship.s_maxspeed + 2) - (me->p_ship.s_maxspeed + 1) *
  519.     ((float) me->p_damage / (float) (me->p_ship.s_maxdamage));
  520.   if (cur_max > me->p_ship.s_maxspeed)
  521.     cur_max = me->p_ship.s_maxspeed;
  522.   if (cur_max < 0)
  523.     cur_max = 0;
  524.  
  525.   if (fr || me->p_speed != old_spd || cur_max != old_cur_spd)
  526.     {
  527.       if (me->p_speed >= me->p_ship.s_maxspeed - 2)
  528.     color = W_Yellow;
  529.       else
  530.     color = W_White;
  531.       db_bar ("Sp", 90, 3,
  532.         me->p_speed, cur_max, me->p_ship.s_maxspeed, DB_3DIGITS, color);
  533.       old_spd = me->p_speed;
  534.       old_cur_spd = cur_max;
  535.     }
  536.  
  537.   if (fr || me->p_shield != old_shl)
  538.     {
  539.       value = (100 * me->p_shield) / me->p_ship.s_maxshield;
  540.       if( value <= 50 )
  541.     color = W_Red;
  542.       else if (value < 10)
  543.     color = W_Yellow;
  544.       else
  545.     color = W_White;
  546.       db_bar ("Sh", 90, 17,
  547.           me->p_ship.s_maxshield - me->p_shield, me->p_ship.s_maxshield, me->p_ship.s_maxshield, DB_3DIGITS, color);
  548.       old_shl = me->p_shield;
  549.     }
  550.  
  551.   if (fr || me->p_damage != old_dam)
  552.     {
  553.       value = (100 * me->p_damage) / me->p_ship.s_maxdamage;
  554.       if (value <= 10)
  555.     color = W_White;
  556.       else if (value > 50)
  557.     color = W_Red;
  558.       else
  559.     color = W_Yellow;
  560.       db_bar ("Da", 90, 31,
  561.           me->p_damage, me->p_ship.s_maxdamage, me->p_ship.s_maxdamage, DB_3DIGITS, color);
  562.       old_dam = me->p_damage;
  563.     }
  564.  
  565.   if (me->p_ship.s_type == ASSAULT)
  566.     cur_max = (((me->p_kills * 3) > me->p_ship.s_maxarmies) ?
  567.            me->p_ship.s_maxarmies : (int) (me->p_kills * 3));
  568.   else if (me->p_ship.s_type == STARBASE)
  569.     cur_max = me->p_ship.s_maxarmies;
  570.   else
  571.     cur_max = (((me->p_kills * 2) > me->p_ship.s_maxarmies) ?
  572.            me->p_ship.s_maxarmies : (int) (me->p_kills * 2));
  573.  
  574.   if (fr || me->p_armies != old_arm || cur_max != old_cur_arm)
  575.     {
  576.       value = me->p_armies;
  577.       mid = 5;
  578.  
  579.       if (value <= 3)
  580.     color = W_White;
  581.       else if (value > mid)
  582.     color = W_Red;
  583.       else
  584.     color = W_Yellow;
  585.       db_bar ("Ar", 218, 3,
  586.       me->p_armies, cur_max, me->p_ship.s_maxarmies, DB_3DIGITS, color);
  587.       old_arm = me->p_armies;
  588.       old_cur_arm = cur_max;
  589.     }
  590.  
  591.   if (fr || me->p_wtemp != old_wpn)
  592.     {
  593.       value = (100 * me->p_wtemp) / me->p_ship.s_maxwpntemp;
  594.       mid = 50;
  595.       if (value > mid)
  596.     color = W_Red;
  597.       else if (value <= 20)
  598.     color = W_White;
  599.       else
  600.     color = W_Yellow;
  601.       db_bar ("Wt", 218, 17,
  602.           me->p_wtemp / 10, me->p_ship.s_maxwpntemp / 10, me->p_ship.s_maxwpntemp / 10, DB_3DIGITS
  603.           ,color);
  604.       old_wpn = me->p_wtemp;
  605.     }
  606.  
  607.   if (fr || me->p_etemp != old_egn)
  608.     {
  609.       value = (100 * me->p_etemp) / me->p_ship.s_maxegntemp;
  610.       mid = 50;
  611.       if (value <= mid / 2)
  612.     color = W_White;
  613.       else if (value < mid / 2 + mid)
  614.     color = W_Yellow;
  615.       else
  616.     color = W_Red;
  617.       db_bar ("Et", 218, 31,
  618.           me->p_etemp / 10, me->p_ship.s_maxegntemp / 10, me->p_ship.s_maxegntemp / 10, DB_3DIGITS
  619.           ,color);
  620.       old_egn = me->p_etemp;
  621.     }
  622.  
  623.   if (fr || me->p_fuel != old_ful)
  624.     {
  625.       value = ((100 * me->p_fuel) / me->p_ship.s_maxfuel);
  626.       mid = 50;
  627.       if (value <= mid)
  628.     color = W_Red;
  629.       else if (value > 90)
  630.     color = W_White;
  631.       else
  632.     color = W_Yellow;
  633.       db_bar ("Fu", 346, 3,
  634.           me->p_fuel, me->p_ship.s_maxfuel, me->p_ship.s_maxfuel, DB_5DIGITS, color);
  635.       old_ful = me->p_fuel;
  636.     }
  637. }
  638.  
  639. void
  640. db_redraw (fr)
  641.      int fr;
  642. {
  643.   if (cup_half_full)
  644.     db_redraw_krp (fr);
  645.   else
  646.     db_redraw_BRM (fr);
  647. }
  648. #endif
  649.  
  650.  
  651.